# _*_ coding:utf-8 _*_
# 开发团队: Mavericks
# 开发人员：Maverick·Ming
# 开发IDE： PyCharm
#   项目名：HelloWorld
#   文件名：4.14 集合.py
# 开发时间：2021/3/23 15:46

print("4.4 集合 Set Type")
'''
创建集合Set
'''
# 创建一个集合
# 使用{}创建
s = {1, 2, 3, 4}
# 结果： {1, 2, 3, 4}  <class 'set'>

# s = {}
# 结果：{} <class 'dict'> 这样创建的不是集合Set,而是字典Dict

# s = {1, 1, 2, 3, 4}
# 结果：{1, 2, 3, 4} <class 'set'> 结果只有1个1，因为集合不允许元素重复

# s = {[1, 2, 3], [4, 5, 6]}
# 结果：TypeError: unhashable type: 'list' 集合中只能保存不可变对象，不能保存列表

# 使用set()函数创建空集合，不能使用{}，{}是用来创建空字典的
# s = set()
# 结果：set() <class 'set'> 此时创建了一个空集合

# 可以通过set()将 Sequence序列 Dict字典 转换为 Set集合
s = set([1, 2, 4, 3, 5, 1, 2])
# 结果：{1, 2, 3, 4, 5} <class 'set'>
s = set('hello')
# 结果：{'e', 'o', 'h', 'l'} <class 'set'>  # 将字符串（序列）转成集合，随机顺序排列元素
s = set({'a':'1', 'b':'2'})
# 结果：{'b', 'a'} <class 'set'>  # 字典转换成集合时，只保有key，不保存value
print(s, type(s))
# d = {'key':'value'}
# print(d, type(d))

# 创建的集合，是否可以使用索引取元素
s = {'a', 'b', 'c', 1, 2, 3}
# print(s[0])
# 结果：TypeError: 'set' object is not subscriptable
print(list(s)[0])
# 结果 1  # 集合无法使用索引读取元素的值

# 使用 in 和 not in 检查元素是否存在
print('a' in s)
print('d' not in s)
# 结果：True

# 使用len()获取集合元素的数量
print(len(s))
# 结果：6

# add('s') 向集合中添加未存在的元素
s.add(10)
# 结果：{1, 2, 3, 'a', 10, 'c', 'b'} <class 'set'>  # 会将10随机插入到集合中

# update(set) 将另一个集合中的元素添加到该集合中
s2 = set('hello')
s.update(s2)

# s.pop() 随机删除集合中的一个元素
# result = s2.pop()
# print(s2, result)

# set.remove(x) 删除集合中指定元素
result = s2.remove('h')
print(s2, result)
# 结果：{'l', 'e', 'o'} None  # 指定删除了'h'元素

# set.clear() 清空集合
s.clear()
# 结果：set() <class 'set'>  # 集合变成空集合
print(s, type(s))

# set.discard(x) 移除指定元素时，若元素不存在remove()会报错，discard()不会报错
result = s2.discard('d')
print(s2, result)
# 结果：{'l', 'e', 'o'} None 不会报错
